package com.ruoyi.serve.service.impl;

import java.util.Date;
import java.util.List;

import com.ruoyi.common.utils.DateUtils;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.serve.mapper.ServerUrlMapper;
import com.ruoyi.serve.domain.ServerUrl;
import com.ruoyi.serve.service.IServerUrlService;

/**
 * 资源管理Service业务层处理
 * 
 * @author ruoyi
 * @date 2023-11-15
 */
@Service
public class ServerUrlServiceImpl implements IServerUrlService 
{
    @Autowired
    private ServerUrlMapper serverUrlMapper;

    /**
     * 查询资源管理
     * 
     * @param id 资源管理主键
     * @return 资源管理
     */
    @Override
    public ServerUrl selectServerUrlById(Long id)
    {
        return serverUrlMapper.selectServerUrlById(id);
    }

    /**
     * 查询资源管理列表
     * 
     * @param serverUrl 资源管理
     * @return 资源管理
     */
    @Override
    public List<ServerUrl> selectServerUrlList(ServerUrl serverUrl)
    {
        return serverUrlMapper.selectServerUrlList(serverUrl);
    }

    /**
     * 新增资源管理
     * 
     * @param serverUrl 资源管理
     * @return 结果
     */
    @Override
    public int insertServerUrl(ServerUrl serverUrl)
    {
        boolean isAccessible = isLinkAccessible(serverUrl.getUrl());
        serverUrl.setState(isAccessible ? 0L : 1L); // 根据需要设置状态值
        serverUrl.setCreateTime(DateUtils.getNowDate());
        return serverUrlMapper.insertServerUrl(serverUrl);
    }

    /**
     * 修改资源管理
     * 
     * @param serverUrl 资源管理
     * @return 结果
     */
    @Override
    public int updateServerUrl(ServerUrl serverUrl)
    {
        boolean isAccessible = isLinkAccessible(serverUrl.getUrl());
        serverUrl.setState(isAccessible ? 0L : 1L); // 根据需要设置状态值
        serverUrl.setUpdateTime(DateUtils.getNowDate());
        return serverUrlMapper.updateServerUrl(serverUrl);
    }

    /**
     * 批量删除资源管理
     * 
     * @param ids 需要删除的资源管理主键
     * @return 结果
     */
    @Override
    public int deleteServerUrlByIds(Long[] ids)
    {
        return serverUrlMapper.deleteServerUrlByIds(ids);
    }

    /**
     * 删除资源管理信息
     * 
     * @param id 资源管理主键
     * @return 结果
     */
    @Override
    public int deleteServerUrlById(Long id)
    {
        return serverUrlMapper.deleteServerUrlById(id);
    }


    /**
     * 定时更新数据库网页链接是否可用
     */
    public void checkAndSaveLinksFromDatabase() {
        List<ServerUrl> serverUrls = serverUrlMapper.selectServerUrlList(new ServerUrl());
        for (ServerUrl serverUrl : serverUrls) {
            boolean isAccessible = isLinkAccessible(serverUrl.getUrl());
            saveLinkStatus(serverUrl, isAccessible);
        }
    }

    private boolean isLinkAccessible(String url) {
        try {
            Connection.Response response = Jsoup.connect(url).execute();
            return response.statusCode() == 200;
        } catch (Exception e) {
            return false;
        }
    }

    private void saveLinkStatus(ServerUrl serverUrl, boolean isAccessible) {
        serverUrl.setState(isAccessible ? 0L : 1L); // 根据需要设置状态值
        serverUrl.setUpdateTime(DateUtils.getNowDate());
        serverUrlMapper.updateServerUrl(serverUrl);
    }

}
